package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.common.Paging;
import com.itheima.dto.user.*;
import com.itheima.entity.User;
import com.itheima.vo.BriefUserVo;
import com.itheima.vo.organization.OrganizationVo;
import com.itheima.vo.user.AllUserVo;
import com.itheima.vo.user.DetailedUserVo;
import com.itheima.vo.user.UserVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @author 51585
 * @description 针对表【user】的数据库操作Service
 * @createDate 2022-10-01 22:00:51
 */
public interface UserService extends IService<User> {

    /**
     * 使用账号密码登录
     *
     * @param dto 账号密码登录dto
     * @return 用户信息vo
     * @throws Exception 异常
     */
    UserVo loginByAccount(AccountLoginDto dto) throws Exception;

    /**
     * 获取图片验证码的方法
     *
     * @param phone 手机号码
     * @param response 响应对象
     * @return 结果
     * @throws IOException 异常
     */
    String getCaptchaImg(String phone,HttpServletResponse response) throws IOException;

    /**
     * 使用电话号码登录
     *
     * @param dto 电话号码登录dto
     * @return 用户信息vo
     * @throws Exception 异常
     */
    UserVo loginByPhone(PhoneLoginDto dto) throws Exception;

    /**
     * 发送手机验证码
     *
     * @param dto 手机号码登录基础dto
     * @throws Exception 异常
     */
    void getPhoneCode(PhoneLoginBaseParam dto) throws Exception;

    /**
     * 更新用户信息(密码，电话)
     *
     * @param dto 更新用户信息dto
     * @return 结果
     * @throws Exception 异常
     */
    String updateUserMessage(UpdateUserMessageDto dto) throws Exception;

    /**
     * 更新用户头像
     *
     * @param updateFile 文件
     * @throws Exception 异常
     */
    void updateImage(MultipartFile updateFile) throws Exception;

    /**
     * 查看个人资料
     *
     * @return 个人详细信息
     * @throws Exception 异常
     */
    DetailedUserVo showUserMessage() throws Exception;


    /**
     * 判断是不是管理员或者学校,是则返回true，不是则返回false
     *
     * @param userId 用户id
     * @return 结果
     */
    boolean isAdministratorsOrSchool(String userId);

    /**
     * 获取用户简略信息
     *
     * @param userIds 用户id集合
     * @return 简略用户信息Vo
     */
    List<BriefUserVo> getBriefUser(List<String> userIds);

    /**
     * 展示所有用户(按层级)（发信息时使用）
     *
     * @return 组织的多级列表映射
     */
    OrganizationVo showAllUsers();

    /**
     * excel导入新用户
     *
     * @param file 文件
     * @throws Exception 异常
     */
    void excelImport(MultipartFile file) throws Exception;

    /**
     * 批量删除用户
     *
     * @param userIdList 用户id集合
     * @throws Exception 异常
     */
    void deleteUser(List<String> userIdList) throws Exception;

    /**
     * 展示所有用户
     *
     * @param dto 展示所有用户筛选Dto
     * @return 管理员界面-所有用户信息vo
     */
    Paging<AllUserVo> showAllUser(AllUserDto dto);

    /**
     * 重置密码
     *
     * @param userId 用户id
     * @throws Exception 异常
     */
    void resetPassword(String userId) throws Exception;
}
